package com.central.log.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 使用方法：
 * 在需要记录日志的方法上加入：@AuditLog(operation = "'新增或更新用户:' + #sysUser.username")
 * 各注解的解释
 * Retention
 * 注解的保留位置（枚举RetentionPolicy），RetentionPolicy可选值：
 * SOURCE：注解仅存在于源码中，在class字节码文件中不包含
 * CLASS：默认的保留策略，注解在class字节码文件中存在，但运行时无法获得
 * RUNTIME：注解在class字节码文件中存在，在运行时可以通过反射获取到
 *
 * Inherited
 * 声明子类可以继承此注解，如果一个类A使用此注解，则类A的子类也继承此注解
 *
 * Documented
 * 声明注解能够被javadoc等识别
 *
 * Target
 * 用来声明注解范围（枚举ElementType），ElementType可选值：
 * TYPE：接口、类、枚举、注解
 * FIELD：字段、枚举的常量
 * METHOD：方法
 * PARAMETER：方法参数
 * CONSTRUCTOR：构造函数
 * LOCAL_VARIABLE：局部变量
 * ANNOTATION_TYPE：注解
 * PACKAGE：包
 * @author: ly
 * @date: 2020/11/13 2:10 下午
 * @email: 664162337@qq.com
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AuditLog {

    /**
     * 操作信息
     * @return
     */
    String operation();
}
